25.3 Ableiten eines vorhandenen Steuerelements  
Ein aus einem oder mehreren Steuerelementen zusammengesetztes neues Steuerelement wird durch Ableitung der Klasse UserControl gebildet. Manchmal möchte man aber nur ein vorhandenes Steuerelement um weitere Funktionalitäten ergänzen oder vorhandene Funktionalitäten für bestimmte Anwendungsfälle spezifizieren. Dann wird, ganz nach den Regeln der Objektorientierung, die Klasse des zu erweiternden Steuerelements abgeleitet. Die geerbten Eigenschaften, Methoden und Ereignisse können Sie so überschreiben, dass das neue Control Ihren Erwartungen entspricht.
An einem kleinen Beispiel möchte ich Ihnen diese Technik zeigen. Dazu wird die Klasse TextBox abgeleitet, um ein neues Steuerelement bereitzustellen, das nur Zahleneingaben entgegennimmt. Das neue Steuerelement soll NumericTextbox heißen. Soll das Steuerelement mehreren Anwendungen zur Verfügung gestellt und weiterverteilt werden, muss es als DLL-Datei kompiliert werden. Sie können folgerichtig entweder ein Projekt vom Typ Klassenbibliothek oder vom Typ Windows-Steuerelementbibliothek öffnen. Das Letztere ist empfehlenswerter, weil sofort alle notwendigen Namespaces bekannt sind. Allerdings muss die Angabe der abgeleiteten Basisklasse von UserControl in den gewünschten Typ geändert werden – in unserem Beispiel also TextBox. (Sie finden das Beispiel auf der Buch-CD im Ordner Kapitel 25\NumericTextBoxSolution.)
| Public Class NumericTestbox
|
| Inherits TextBox
|
Da das neue Steuerelement nur Zahleneingaben akzeptieren soll, muss die geerbte Methode OnKeyPress überschrieben werden, weil der Parameter vom Typ KeyPressEventArgs in seiner Eigenschaft KeyChar das Zeichen der gedrückten Taste liefert.
Die Zahlen 0 bis 9 entsprechen den ASCII-Werten 47 bis 57. Lassen wir nur diese Werte zu, wäre es dem Anwender nicht möglich, mit der (æ)-Taste ein Zeichen zu löschen. Der Wert 8 beschreibt diese Taste und muss in jedem Fall ebenfalls zugelassen werden, während alle anderen Tasten unterdrückt werden.
| Imports System.Windows.Forms
|
| Imports System.drawing
|
| <ToolboxBitmap("..\..\NumericTextbox.bmp")> _
|
| Public Class NumericTextBox
|
| Inherits TextBox
|
| Protected Overrides Sub OnKeyPress(ByVal e As KeyPressEventArgs)
|
| ' registrierte Ereignishandler aufrufen
|
| MyBase.OnKeyPress(e)
|
| Dim input As Integer = Convert.ToInt32(e.KeyChar)
|
| If ((input >= 47 And input <= 57) Or (input = 8)) Then
|
| Return
|
| End If
|
| e.Handled = True
|
| End Sub
|
| End Class
|
Natürlich dürfen wir nicht vergessen, die gleichnamige Methode in der Basisklasse aufzurufen. Vergessen wir diese Anweisung, wird dem Anwender des Steuerelements NumericTextbox zwar das Ereignis KeyPress angeboten, aber die installierten Ereignishandler nicht ausgeführt.
Es steht Ihnen natürlich frei, mit Attributen das Verhalten des neuen Steuerelements zur Entwicklungs- und Laufzeit zu beeinflussen. Wie das geht, habe ich Ihnen in Abschnitt 25.2 gezeigt. Unsere abgeleitete Textbox hat, um ihr auch eine ansprechende und leicht zu identifizierende Präsentation in der Toolbox zu geben, eine individuelle Toolbox-Bitmap, die mit einem Attribut vor dem Klassenbezeichner bekannt gegeben wird.
Nach dem Kompilieren liegt eine DLL-Datei vor. Sie können NumericTextbox benutzen, nachdem Sie es der Toolbox über ihr Kontextmenü hinzugefügt haben. Gehen Sie dazu auf die Schaltfläche Durchsuchen und wählen die DLL-Datei.
|